package day06.Lambda;

import day01_IO_JDBC.demo_JDBC_users.Entity.Users;
import org.junit.Test;

import java.util.function.Consumer;

/*
*       双冒号 :: 是 Java 8 引入的“方法引用”（Method Reference） 运算符。
        它属于 语法糖，用来把 已有方法 直接当作 函数式接口实例 使用，
        而不必手写匿名内部类或 Lambda 表达式
* */

public class StaticLambdaDemo {
    public static void staticMethod(){
        System.out.println("staticMethod() 无参 ---  ");
    }

    public static void staticMethod2(Users users){
        System.out.println("staticMethod() 有参 ---  ");
    }

    @Test
    public void test(){

        /*
        *   FntInterfaceDemo 必须是一个 函数式接口（只有一个抽象方法）。
            staticMethod 是 StaticLambdaDemo 的 静态方法
            格式 ---->   函数式接口::静态方法
        * */

        FntInterfaceDemo fntInterfaceDemo= StaticLambdaDemo::staticMethod;
        fntInterfaceDemo.nihao();

        /*
        * 编译器会 自动生成 一个 Lambda 对象，等价于：
            FntInterfaceDemo f = new FntInterfaceDemo() {
                @Override
                public void nihao() {
                    StaticLambdaDemo.staticMethod(); // 直接调用静态方法
                }
            };
        * */

    }

    @Test
    public void test1(){
        Consumer<Users> consumer= StaticLambdaDemo::staticMethod2;
        consumer.accept(new Users());
    }
}
